Pendahuluan

Tugas UAS ini bertujuan untuk mengukur kemampuan dalam membuat visualisasi data yang informatif menggunakan R Markdown. Dataset yang digunakan berasal dari file Data.xlsx.

Struktur Folder

Proyek ini mengikuti struktur sebagai berikut:

project/
├── data/       
├── figures/  
├── docs/       
├── script/     
└── styles.css  

Persiapan Data

# Validasi file dan membaca dataset
setwd("C:/Users/ACER/OneDrive/Documents/UAZ DATAVIZ")
if (!file.exists("data.xlsx")) {
  stop("File data.xlsx tidak ditemukan. Pastikan file berada di direktori yang benar.")
}

data <- read_xlsx("data.xlsx")

required_columns <- c("Pendapatan_per_kapita", "Angka_Harapan_Hidup")
if (!all(required_columns %in% names(data))) {
  stop("Beberapa kolom yang diperlukan tidak ditemukan di dataset.")
}

Visualisasi Data

1. Grafik Univariat: Histogram

print(names(data))
## [1] "geo"                   "Negara"                "Benua"                
## [4] "Tahun"                 "Angka_Harapan_Hidup"   "Pendapatan_per_kapita"
## [7] "Populasi"              "Jumlah_anak"

a. Distribusi Angka Harapan Hidup

Grafik berikut menunjukkan distribusi angka harapan hidup dalam dataset. Histogram ini membantu kita memahami persebaran nilai, termasuk apakah data condong ke kanan, ke kiri, atau simetris.

# Histogram untuk variabel numerik
p1 <- ggplot(data, aes(x=Angka_Harapan_Hidup)) +  # Gunakan backticks jika ada spasi di nama kolom
  geom_histogram(binwidth = 5, fill = "skyblue", color = "black") +
  labs(title = "Distribusi Angka Harapan Hidup",
       x = "Angka_Harapan_Hidup",
       y = "Frekuensi") +
  theme_minimal()
if (!dir.exists("figures")) dir.create("figures")
ggsave("figures/scatterplot.png", p1)
## Saving 7 x 5 in image
print(p1)

b. Distribusi Pendapatan per Kapita

Grafik berikut menunjukkan distribusi pendapatan per kapita. Grafik ini penting untuk melihat pola umum, seperti adanya outlier atau pola tertentu pada data.

p2 <- ggplot(data, aes(x = Pendapatan_per_kapita)) +
  geom_histogram(binwidth = 2100, fill = "lightgreen", color = "black") +
  labs(title = "Distribusi Pendapatan per Kapita",
       x = "Pendapatan per Kapita",
       y = "Frekuensi") +
  theme_minimal()
ggsave("figures/histogram2.png", p2)
## Saving 7 x 5 in image
print(p2)

2. Grafik Bivariat: Scatter Plot

a. Hubungan antara Pendapatan per Kapita dan Angka Harapan Hidup

Scatter plot berikut menunjukkan hubungan antara pendapatan per kapita dan angka harapan hidup. Grafik ini membantu melihat apakah ada pola hubungan linear, seperti semakin tinggi pendapatan, semakin tinggi angka harapan hidup.

p2 <- ggplot(data, aes(x = Pendapatan_per_kapita, y = `Angka_Harapan_Hidup`)) +
  geom_point(color = "darkred", alpha = 0.5) +
  labs(title = "Hubungan antara Pendapatan per Kapita dan Angka Harapan Hidup",
       x = "Pendapatan_per_Kapita",
       y = "Angka_Harapan_Hidup") +
  theme_minimal()

ggsave("figures/scatterplot2.png", p2)
## Saving 7 x 5 in image
print(p2)

3.A Grafik Multivariat: Bubble Plot

Populasi sebagai ukuran gelembung dan Benua sebagai kategori warna.

p3 <- ggplot(data, aes(x = Angka_Harapan_Hidup, 
                       y = `Pendapatan_per_kapita`, 
                       size = Populasi, color = Benua)) +
  geom_point(alpha = 0.5) +
  scale_size(range = c(2, 12)) +
  labs(title = "Hubungan Multivariat Antar Variabel",
       x = "Angka Harapan Hidup",
       y = "Pendapatan per Kapita",
       size = "Populasi",
       color = "Benua") +
  theme_minimal()

ggsave("figures/bubbleplot.png", p3)
## Saving 7 x 5 in image
print(p3)

3.B Gravik Multifariat: Bubble Plot

heatmap_data <- data %>%
  group_by(Benua, Tahun) %>%
  summarize(MeanLifeExpectancy = mean(`Angka_Harapan_Hidup`, na.rm = TRUE), .groups = 'drop')

p3 <- ggplot(heatmap_data, aes(x = Tahun, y = Benua, fill = MeanLifeExpectancy)) +
  geom_tile() +
  labs(title = "Heatmap Angka Harapan Hidup Rata-rata",
       x = "Tahun",
       y = "Benua",
       fill = "Rata-rata Harapan Hidup") +
  theme_minimal()

ggsave("figures/heatmap.png", p3)
## Saving 7 x 5 in image
print(p3)

4. Grafik Interaktif: Scatter Plot dengan Plotly

A. pembaca dapat mengeksplorasi hubungan antar variabel secara langsung.

p4 <- plot_ly(data, x = ~Angka_Harapan_Hidup, 
              y = ~`Pendapatan_per_kapita`, 
              type = 'scatter', 
              mode = 'markers', 
              marker = list(size = 4, color = ~as.factor(Benua))) %>%
  layout(title = "Scatter Plot Interaktif",
         xaxis = list(title = "Angka Harapan Hidup"),
         yaxis = list(title = "Pendapatan per Kapita"))

htmlwidgets::saveWidget(as_widget(p4), "figures/plotly_scatter.html")
## Warning in dir.create(target_dir):
## 'plotly_scatter_files\htmltools-fill-0.5.8.1' already exists
## Warning in dir.create(target_dir): 'plotly_scatter_files\htmlwidgets-1.6.4'
## already exists
## Warning in dir.create(target_dir): 'plotly_scatter_files\plotly-binding-4.10.4'
## already exists
## Warning in dir.create(target_dir): 'plotly_scatter_files\typedarray-0.1'
## already exists
## Warning in dir.create(target_dir): 'plotly_scatter_files\jquery-3.5.1' already
## exists
## Warning in dir.create(target_dir): 'plotly_scatter_files\crosstalk-1.2.1'
## already exists
## Warning in dir.create(target_dir):
## 'plotly_scatter_files\plotly-htmlwidgets-css-2.11.1' already exists
## Warning in dir.create(target_dir): 'plotly_scatter_files\plotly-main-2.11.1'
## already exists
p4

B. Grafik interaktif 3D

p4 <- plot_ly(data, x = ~`Pendapatan_per_kapita`, y = ~`Angka_Harapan_Hidup`, z = ~Populasi,
              type = "scatter3d", mode = "markers",
              marker = list(size = 5, color = ~Populasi, colorscale = "Viridis"))

p4

5. Grafik Dinamis: Gapminder Animation

perubahan indikator sosial-ekonomi global dari waktu ke waktu.

p5 <- ggplot(gapminder, aes(x = gdpPercap, 
                            y = lifeExp, 
                            size = pop, 
                            color = continent)) +
  geom_point(alpha = 0.7) +
  scale_x_log10() +
  labs(title = "Gapminder: Perubahan dari Tahun ke Tahun",
       x = "Pendapatan per Kapita (log scale)",
       y = "Angka Harapan Hidup",
       size = "Populasi",
       color = "Benua") +
  theme_minimal() +
  gganimate::transition_states(year, transition_length = 2, state_length = 1) +
  gganimate::enter_fade() +
  gganimate::exit_fade() +
  labs(subtitle = "Tahun: {closest_state}")

anim <- gganimate::animate(p5, nframes = 100, renderer = gganimate::gifski_renderer())

gganimate::anim_save("gapminder_animation.gif", animation = anim)

knitr::include_graphics("gapminder_animation.gif")

b. Scatter Plot Dasar

p5 <- ggplot(gapminder, aes(x = gdpPercap, y = lifeExp, size = pop, color = continent)) +
  geom_point(alpha = 0.7) +
  scale_x_log10() +
  labs(title = "Hubungan GDP per Capita dan Life Expectancy",
       x = "GDP per Capita",
       y = "Life Expectancy") +
  theme_minimal()
print(p5)

c. Animasi Transisi Waktu

p6 <- p5 +
  transition_time(year) +
  labs(title = "Year: {frame_time}") +
  shadow_mark(alpha = 0.3, size = 0.5)

animate(p6, renderer = gifski_renderer())

D. Animasi Setiap Benua

Kesimpulan

Berdasarkan analisis visual:

  1. Angka harapan hidup menunjukkan distribusi yang beragam di berbagai negara.
  2. Ada korelasi tertentu antara pendapatan per kapita dan angka harapan hidup.
  3. Rata-rata angka harapan hidup berbeda berdasarkan benua dan tahun.
  4. Visualisasi interaktif memberikan gambaran hubungan tiga variabel yang lebih mendalam.
  5. Animasi membantu memahami perubahan pola data seiring waktu.